package com.lib.framework.base

/**
 * Copyright (C), 2019-2020
 * FileName: BaseConfigListMap
 * Author: Kevin
 * Date: 2020-01-07 16:23
 * Description: 配置列表 的基类
 * History:
 * <author> <time> <version> <desc>
 * 作者姓名 修改时间 版本号 描述
 */
open class BaseConfigList<T> {

    /**
     * 配置 map，key 是配置的name，value 是具体的配置类
     */
    private val mConfigMap = mutableMapOf<String, T>()

    /**
     * 配置列表
     */
    protected val mConfigList = mutableListOf<T>()

    /**
     * 增加配置
     *
     * @param configName 配置名称（唯一），可用于移除配置
     * @param config 配置类
     * @param addToIndex 加入到列表中的位置索引
     */
    fun addConfig(configName: String, config: T, addToIndex: Int = -1) {
        if (configName.isEmpty()) return

        // 先删除已经存在的配置
        removeConfig(configName)

        mConfigMap[configName] = config

        try {
            if (addToIndex < 0 || addToIndex >= mConfigList.size) {
                mConfigList.add(config)
            } else {
                mConfigList.add(addToIndex, config)
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

    /**
     * 移除配置
     *
     * @param configName 配置名称（唯一）
     */
    fun removeConfig(configName: String) {
        val v = mConfigMap.remove(configName) ?: return
        mConfigList.remove(v)
    }

    /**
     * 清空配置
     */
    fun clear() {
        mConfigMap.clear()
        mConfigList.clear()
    }
}